银行业务模拟 C++的`

来源:百度知道 编辑:UC知道 时间:2024/05/25 20:41:33
假设某银行有4个窗口对外接待客户,从早晨银行开门起不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户。因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进和银行的客户。如果某个窗口的业务员正空闲,则可上前输业务。反之,若个窗口均有客户所占,他便会排在为数最少的队伍后面。编制一个程序模拟银行的这种业务活动并计算一天中客户在银行的平均逗留时间。

/*bank_sim.h*/
#ifndef BANK_SIM_H
#define BANK_SIM_H

#include <stddef.h>

#define COUNTER 8 /* 银行共有 8 个营业窗口 */
#define ARRIVAL COUNTER /* 客户到达事件 */

typedef struct {
size_t OccurTime, NType; /* 事件发生时刻;事件类型 */
} Event; /* 链表数据元素类型 */

typedef struct Enode {
Event event;
struct Enode *next;
} Enode, *EventList;

typedef struct {
size_t ArrTime, Duration; /* 到达时刻;办理时间 */
} QElem; /* 队列数据元素类型 */

typedef struct Qnode {
QElem Cust; /* 客户记录 */
struct Qnode *next;
} Qnode, *Qptr;

typedef struct {
Qptr front, rear; /* 队头指针,队尾指针 */
} LinkQueue;

int bank_open( void ); /* 初始化操作 */
int CustArr( void ); /* 处理客户到达事件 */
int CustDepart( void ); /* 处理客户离开事件 */
void DelFirst( void ); /* 删除事件表第一个节点,并把值赋给en */
int DeQueue( LinkQueue * ); /* 出队 */
void DestroyAll( void ); /* 销毁链表和队列 */